package com.nuts.base.core;

import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * Dao基类
 *
 * @author 许自辉
 * @date 2017年7月21日 下午2:21:15
 */
@Repository
public interface IBaseDao<T,T2> {
	
	/**
	 * 根据id获取对象
	 *
	 * @author 许自辉
	 * @date 2017年7月21日
	 * @param id 主键
	 * @return 返回的对象
	 */
	T2 getById(@Param("id") int id);
	
	/**
	 * 很据vo对象条件获取对象
	 *
	 * @author 许自辉
	 * @date 2017年7月21日
	 * @param record vo对象条件
	 * @return 查询的对象
	 */
	T2 get(T record);

	/**
	 * 获取List对象
	 *
	 * @author 许自辉
	 * @date 2017年7月21日
	 * @param record vo对象条件
	 * @return 查询的对象集合
	 */
	List<T2> getList(T record);

	/**
	 * 根据id删除对象
	 *
	 * @author 许自辉
	 * @date 2017年7月21日
	 * @param id 主键id
	 * @return 查询的对象
	 */
	int deleteById(@Param("id") int id);
	
	/**
	 * 批量删除对象
	 *
	 * @author 许自辉
	 * @date 2017年7月21日
	 * @param ids 主键id数组
	 * @return 成功的条数
	 */
	int deleteList(@Param("ids") int[] ids);

	/**
	 * 插入对象
	 *
	 * @author 许自辉
	 * @date 2017年7月21日
	 * @param record 插入的对象
	 * @return 成功的条数
	 */
	int insert(T record);

	/**
	 *  插入对象List
	 *
	 * @author 许自辉
	 * @date 2017年7月21日
	 * @param records 插入的对象
	 * @return 成功的条数
	 */
	int insertList(List<T> records);

	/**
	 * 更新对象
	 *
	 * @author 许自辉
	 * @date 2017年7月21日
	 * @param record 更新的对象
	 * @return 成功的条数
	 */
	int update(T record);
	
	/**
	 * 更新对象List
	 *
	 * @author 许自辉
	 * @date 2017年7月21日
	 * @param records 更新的对象List
	 * @return 成功的条数
	 */
	int updateList(List<T> records);

}
